文章同步發表至 Medium
最後在進入小專案之前,會分別介紹要如何在 .NET 和 .NET Framework 中和 PostgreSQL 進行溝通。這邊會選擇使用 Entity Framework 作為溝通的方法,介紹如何搭配 Npgsql 來和資料庫做連線。
首先要介紹的是相對單純的 NET。因為沒有支援特殊的檔案格式 .edmx
,不需要特別使用 Visual Stadio 才能使用,因此示範的 IDE 會是 Rider。以下是要安裝的 Nuget 套件:
套件 | 版本 |
---|---|
Microsoft.EntityFrameworkCore | 6.0.8 |
Microsoft.EntityFrameworkCore.Design | 6.0.8 |
Npgsql.EntityFrameworkCore.PostgreSQL | 6.0.6 |
Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite | 6.0.6 |
第二個套件的用途是讓我們可以利用 CLI 和資料庫建立連線,並且將 Tables 自動轉換成相對應的物件。第四個套件則是讓我們可以使用 NetTopologySuite 的型別,接取資料庫中型別為 geometry 的資料。
這裡要使用的是 DB First 的方式,將資料引入,另外也有使用 Code First 的開發方式,但這裡就不贅述。
-- 第一次使用 EF CLI 的話請先安裝
-- dotnet tool install --global dotnet-ef
dotnet ef dbcontext scaffold "Host=localhost;Database=db_with_postgis;Username=postgres;Password=0000;" Npgsql.EntityFrameworkCore.PostgreSQL -o ./Models/Db -c MyContext -f
這裡有幾個參數要輸入:
-o
:指定生成的物件位置,不存在的話就會自動建立-c
:指定生成的 DbContext 名稱-f
:是否複寫之前的檔案Program.cs
如果要使用 NetTopologySuite 來讀取 Geometry 類型的話,要記得在設定的地方加上 UseNetTopologySuite()
:
builder.Services.AddDbContext<MyContext>(options =>
options.UseNpgsql(builder.Configuration.GetConnectionString("Db"),
s => s.UseNetTopologySuite()));
這樣基本上就完成和 PostgreSQL 的連線了,後續的使用方法和一般的 EntityFramework 相同,只是你可以直接把資料庫中 Geometry 的型別接出來,做出像 ST_Within 等的操作而不需要仰賴資料庫連線。